export class IVoEntity {
  _id?: string;
  /* 类型名称（英文） */
  name: string;
  desc: string;
  /**
   * 类型用途
   * vo 展示型数据
   */
  type: 'vo';

  /**
   * 数据字段
   * 1.仅作类型用于描述一个对象的模型
   * 2.用作API时，表达此接口返回值的类型
   * 3.用作Action时，用来描述一个函数的返回值
   */
  fields?: IVoEntityField[];
}

export class IVoEntityField {
  /* 字段名 */
  name?: string;
  /* 描述 */
  desc?: string;
  /* 数据类型 */
  type?: 'string' | 'number' | 'object' | 'boolean';
  isApi?: boolean;
  isArray?: boolean;
  required?: boolean;
  /**
   * 枚举
   */
  enums?: IVoEntityFieldEnum[];
  /**
   * 子对象
   */
  fields?: IVoEntityField[];
  additionalProperties?: {
    type: IVoEntityField['type'];
  };

  /* 引用模型ObjectId */
  import?: string;
  importEntity?: IVoEntity;

  /**
   * 默认值JSON
   */
  default?: string;
  property?: unknown;
  example?: string | Record<string, any>;

  id?: string;
}

export class IVoEntityFieldEnum {
  label: string;
  value: string | number;
  type: 'string' | 'number';
  color?: string;
}
